/**
 * 日志等级定义及转换工具头文件
 * 主要功能: 
 * 1.定义日志等级枚举
 * 2.提供日志等级到字符串的转换能力
 */
#ifndef LEVEL_H
#define LEVEL_H

namespace Log 
{
    /// @brief 日志等级相关功能类
    /// @remark 包含日志等级枚举定义和等级转换功能
    class LogLevel
    {
    public:
        /// @brief 日志等级枚举定义
        /// @warning ERROR 在部分平台可能是保留关键字，建议改用 ERR
        enum class level
        {
            UNKNOW = 0,   ///< 未知等级
            DEBUG,        ///< 调试信息
            INFO,         ///< 普通信息
            WARN,         ///< 警告信息
            ERROR,        ///< 错误信息
            FATAL,        ///< 严重错误
            OFF           ///< 关闭所有日志输出
        };

        /// @brief 将日志等级转换为可读字符串
        /// @param level 要转换的日志等级枚举值
        /// @return 对应的等级字符串(全大写形式)
        /// @note 当传入未知等级时返回"UNKNOW"
        /// @warning ERROR等级在存在Windows.h等头文件时可能引发编译错误
        const static char* toString(const LogLevel::level& level)
        {
            switch (level) {
            case LogLevel::level::DEBUG:  return "DEBUG";
            case LogLevel::level::INFO:   return "INFO";
            case LogLevel::level::WARN:   return "WARN";
            case LogLevel::level::ERROR:  return "ERROR";
            case LogLevel::level::FATAL:  return "FATAL";
            case LogLevel::level::OFF:    return "OFF";
            default:                     return "UNKNOW";  // 处理未定义等级
            }
        }
    };
}

#endif